home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / m2 / m2_part1.lha / modula / dice / dice.LHA / cc / subs.c < prev    next >
C/C++ Source or Header  |  1991-04-24  |  2KB  |  132 lines

  1.  
  2. /*
  3.  *  SUBS.C
  4.  *
  5.  *  (c)Copyright 1990, All Rights Reserved
  6.  */
  7.  
  8. #include "defs.h"
  9.  
  10. Prototype int ExtArgsEnv(short, char ***, char *);
  11. Prototype char *skipspace(char *);
  12. Prototype char *skipnspace(char *);
  13. Prototype void CreateObjPath(char *);
  14.  
  15. /*
  16.  *  ExtArgsEnv()        DCCOPTS
  17.  */
  18.  
  19. int
  20. ExtArgsEnv(ac, pav, envname)
  21. short ac;
  22. char ***pav;
  23. char *envname;
  24. {
  25.     int fd = open(envname, O_RDONLY);
  26.     long len;
  27.  
  28.     if (fd < 0)
  29.     return(ac);
  30.  
  31.     if ((len = lseek(fd, 0L, 2)) > 0) {
  32.     char *str = malloc(len + 1);
  33.     char *ptr;
  34.     int nac = 0;
  35.     char **nav;
  36.  
  37.     lseek(fd, 0L, 0);
  38.     read(fd, str, len);
  39.     str[len] = 0;
  40.  
  41.     /*
  42.      *  parse
  43.      */
  44.  
  45.     ptr = skipspace(str);
  46.     while (*ptr) {
  47.         ++nac;
  48.         ptr = skipnspace(ptr);
  49.         ptr = skipspace(ptr);
  50.     }
  51.     nav = malloc((ac + nac + 1) * sizeof(char *));
  52.     movmem(*pav, nav, ac * sizeof(char *));
  53.     nac = ac;
  54.     ptr = skipspace(str);
  55.     while (*ptr) {
  56.         nav[nac] = ptr;
  57.         ptr = skipnspace(ptr);
  58.         if (*ptr)
  59.         *ptr++ = 0;
  60.         ptr = skipspace(ptr);
  61.         ++nac;
  62.     }
  63.     nav[nac] = NULL;
  64.     ac = nac;
  65.     *pav = nav;
  66.     }
  67.     close(fd);
  68.     return(ac);
  69. }
  70.  
  71. char *
  72. skipspace(ptr)
  73. char *ptr;
  74. {
  75.     while (*ptr == ' ' || *ptr == 9)
  76.     ++ptr;
  77.     return(ptr);
  78. }
  79.  
  80. char *
  81. skipnspace(ptr)
  82. char *ptr;
  83. {
  84.     while (*ptr != ' ' && *ptr != 9 && *ptr)
  85.     ++ptr;
  86.     return(ptr);
  87. }
  88.  
  89. /*
  90.  *  check for path existance
  91.  */
  92.  
  93. void
  94. CreateObjPath(file)
  95. char *file;
  96. {
  97.     short i;
  98.     short j;
  99.     BPTR lock;
  100.     char tmp[128];
  101.  
  102.     for (i = strlen(file); i >= 0 && file[i] != '/' && file[i] != ':'; --i);
  103.  
  104.     if (i <= 0)
  105.     return;
  106.     strncpy(tmp, file, i);
  107.     tmp[i] = 0;
  108.  
  109.     /*
  110.      *    valid directory
  111.      */
  112.  
  113.     if (lock = Lock(tmp, SHARED_LOCK)) {
  114.     UnLock(lock);
  115.     return;
  116.     }
  117.  
  118.     /*
  119.      *    invalid, attempt to create directory path.
  120.      */
  121.  
  122.     for (j = 0; j <= i; ++j) {
  123.     if (file[j] == '/') {
  124.         strncpy(tmp, file, j);
  125.         tmp[j] = 0;
  126.         if (mkdir(tmp) < 0 && errno != EEXIST)
  127.         break;
  128.     }
  129.     }
  130. }
  131.  
  132.